package cn.italkcloud.cph.service;

import cn.italkcloud.cph.constants.enums.vos.CustomerTypeEnum;
import cn.italkcloud.cph.entity.VosCustomer;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * VOS账户 服务类
 * </p>
 *
 * @author dominate
 * @since 2024-07-05
 */
public interface IVosCustomerService extends IService<VosCustomer> {

    boolean isOwner(int accountId, int id);

    /**
     * 获取VOS账户
     * 如果账号不存在，将根据账号名称从VOS同步后创建
     *
     * @param vosAccount VOS账号名称
     * @return VOS账户
     */
    VosCustomer getByVosAccount(int serverId, String apiUrl, String vosAccount);

    /**
     * 查询 VOS账户
     *
     * @param accountId 所属用户账号ID
     * @param serverId  VOS服务器ID
     * @param vosKey    查询 VOS Key
     * @return VOS账户
     */
    List<VosCustomer> query(int accountId, int serverId, String vosKey, CustomerTypeEnum customerType);

    /**
     * 获取账号下 VOS账户
     *
     * @param accountId 用户账号ID
     * @return VOS账户列表
     */
    List<VosCustomer> getByAccountId(int accountId);

    /**
     * 用VOS账号名称查找ID
     *
     * @param vosAccount VOS账号名称
     * @return ID
     */
    int findByVosAccount(int serverId, String vosAccount);

    /**
     * 用户账号ID 查找ID列表
     *
     * @param accountId 用户账号ID
     * @return ID列表
     */
    List<Integer> findByAccountId(int serverId, int accountId);

    /**
     * 获取有效VOS账户列表
     *
     * @return VOS账户列表
     */
    List<VosCustomer> getValidList(int serverId);

    /**
     * 获取VOS账号名称Map
     *
     * @param idCollection ID集合
     * @return VOS账号名称Map
     */
    Map<Integer, String> getVosAccountMap(Collection<Integer> idCollection);

    List<VosCustomer> getListByIds(Collection<Integer> idCollection);

    boolean unbind(int id);

    boolean hasCustomer(int serverId);


}
